# ---- 第一阶段：构建阶段 (Builder Stage) ----
# 使用官方的 golang 镜像，它包含了所有编译工具
FROM golang:1.19-alpine AS builder

# 设置工作目录
WORKDIR /app

# 拷贝 Go 模块文件（如果项目使用 Go Modules）
COPY go.mod go.sum ./

# 下载依赖
RUN go mod download

# 拷贝所有源代码
COPY . .

# 编译应用。CGO_ENABLED=0 是为了构建一个纯静态的二进制文件
# -o /app/main 指定输出文件路径和名称
RUN CGO_ENABLED=0 go build -o /app/main .


# ---- 第二阶段：生产阶段 (Production Stage) ----
# 使用 'scratch' 镜像。这是一个绝对空的基础镜像，里面什么都没有！
# 这是最极致的镜像瘦身和安全实践。
FROM scratch

# 设置工作目录
WORKDIR /app

# 从“构建阶段”仅仅拷贝那个编译好的二进制文件
COPY --from=builder /app/main .

# 暴露应用监听的端口
EXPOSE 8080

# 定义容器启动时执行的命令
ENTRYPOINT ["/app/main"]